/*************************************************************************
> File Name: duaPointers.cpp
> Author: icebear
> Mail: 3322366195@qq.com
> Created Time: 2024-01-10 22:44:54
> Description:
80. 删除有序数组中的重复项 II
给你一个有序数组 nums ，请你 原地 删除重复出现的元素，
使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度。

不要使用额外的数组空间，你必须在 原地 修改输入数组
并在使用 O(1) 额外空间的条件下完成。
************************************************************************/


// 思路：
// 既然保留两位，就有两位的可无视空间，只需要判断前两个空间就行
#include <vector>
using namespace std;

class Solution
{
public:
    int removeDuplicates(vector<int> &nums)
    {
        int length = nums.size();
        int slow = 2, fast = 2;
        if (length < 2)
        {
            return length;
        }
        while (fast < length)
        {
            if (nums[fast] != nums[slow - 2])
            { // 此时fast所指的元素就是需要保留的元素
                nums[slow] = nums[fast];
                slow++; // 由于已经维护的无重复数组新加入了一个元素，因此slow指针需要后移
            }
            fast++;
        }
        return slow;
    }
};
